//********************************************************************************************************
// Product Name: MapWindow.dll Alpha
// Description:  The basic module for MapWindow version 6.0
//********************************************************************************************************
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); 
// you may not use this file except in compliance with the License. You may obtain a copy of the License at 
// http://www.mozilla.org/MPL/ 
//
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
// ANY KIND, either expressed or implied. See the License for the specificlanguage governing rights and 
// limitations under the License. 
//
// The Original Code is from MapWindow.dll version 6.0
//
// The Initial Developer of this Original Code is Ted Dunsford. Created 7/22/2008 2:08:57 PM
// 
// Contributor(s): (Open source contributors should list themselves and their modifications here). 
//
//********************************************************************************************************

using MapWindow.Geometries;
using Microsoft.DirectX;

namespace MapWindow.DirectX
{


    /// <summary>
    /// IDrawTransform specifies any interface that takes double precision coordinates in one context as 
    /// an Coordinate and converts them to 3D world space.
    /// </summary>
    public interface IDrawTransform
    {

       
        #region Methods


        /// <summary>
        /// Converts a double valued coordinate from some kind of projection space into a
        /// corresponding location in the 3D view.
        /// </summary>
        /// <param name="coord">Any valid Implementation of Coordinate.</param>
        /// <returns>A Vector3 representing the position in world coordinates.</returns>
        Vector3 ProjToView(Coordinate coord);

         /// <summary>
        /// Converts a double valued coordinate from some kind of projection space into a
        /// corresponding location in the 3D view.
        /// </summary>
        /// <param name="vect">Any valid Implementation of Vector.</param>
        /// <returns>A Vector3 representing the position in world coordinates.</returns>
        Vector3 ProjToView(Vector vect);

        /// <summary>
        /// Transforms a value from the 3D model space into the equivalent, double precision
        /// floating coordinate domain.
        /// </summary>
        /// <param name="position">The 3D position in model space to turn into geographic coordinates</param>
        /// <returns>The geographic coordinates to display.</returns>
        Coordinate ViewToProj(Vector3 position);

        /// <summary>
        /// Transforms a value form the 3D model space into a vector with the X, Y and Z terms
        /// that would match the geographic location.
        /// </summary>
        /// <param name="position">The position in model space</param>
        /// <returns>An Vector in geographic coordinates</returns>
        Vector ViewToProjVector(Vector3 position);
       

        #endregion

      



    }
}
